package com.xhj.mybatis.plugin;

import java.util.Properties;

/**
 * Interceptor
 *
 * @author XJks
 * @description 定义一个拦截器接口，用于在 MyBatis 执行过程中插入自定义逻辑
 */
public interface Interceptor {

    /**
     * 拦截方法，用户可以在这里实现自定义的处理逻辑
     *
     * @param invocation 表示被拦截的方法调用信息
     * @return 返回值为方法执行结果，可以是原始结果或修改后的结果
     * @throws Throwable 可能会抛出异常
     */
    Object intercept(Invocation invocation) throws Throwable;

    /**
     * 默认方法，用于生成代理对象
     *
     * @param target 需要被代理的目标对象
     * @return 返回一个被包装后的代理对象，代理对象会在执行时调用拦截器逻辑
     */
    default Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    /**
     * 默认方法，用于设置拦截器的属性
     *
     * @param properties 配置参数
     */
    default void setProperties(Properties properties) {
        // NOP（No Operation），什么都不做
    }

}
